
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Sentinel限流怎么做的 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>Sentinel限流怎么做的 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是Sentinel？它主要提供了哪些核心功能来保障系统的高可用性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Sentinel是阿里巴巴开源的一个分布式系统的流量管理组件，主要用于保障微服务架构中的高可用性。它提供的核心功能包括：流量控制、熔断降级、系统负载保护、实时监控以及动态规则配置。</div>
          </div>
          <div class="card-source">来源: Sentinel概述</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">除了保护系统资源和防止恶意攻击，实施限流技术还有哪些重要作用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">除了保护资源和防攻击，限流技术还有四个重要作用：1. 提升用户体验，通过优先处理重要请求来保障关键业务；2. 保障服务质量（QoS），防止下游服务故障向上游扩散；3. 平衡负载，将流量均匀分布到多个服务实例；4. 提高系统弹性，通过自动调节请求速率来应对突发流量。</div>
          </div>
          <div class="card-source">来源: 限流的必要性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">Sentinel的关联限流策略是如何工作的？请举例说明其应用场景。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">关联限流策略是指当某个资源的请求量超过阈值时，对其他关联资源进行限流。它适用于资源之间有依赖关系的场景，例如，当某个核心接口的调用量过大时，可以对其所依赖的其他接口进行限流保护，以确保核心服务的稳定性。</div>
          </div>
          <div class="card-source">来源: Sentinel的限流策略 - 2. 关联限流策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">什么是热点参数限流策略？它主要应用于哪些场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">热点参数限流策略是通过监控请求中的参数，对某些访问频率特别高的“热点”参数进行限流。这种策略适用于参数频繁变化的场景，例如搜索引擎中的热门关键词、电商系统中的热门商品ID或用户登录等。</div>
          </div>
          <div class="card-source">来源: Sentinel的限流策略 - 4. 热点参数限流策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">当请求达到Sentinel的限流阈值时，系统可以采取哪些不同的处理策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当请求达到限流阈值时，系统可以采取三种处理策略：1. 快速失败：立即拒绝请求并返回错误；2. 排队等待：将请求放入队列中，按顺序处理，会延迟响应时间；3. 降级处理：调用预设的降级方案或提供简化的服务，以保证部分功能可用。</div>
          </div>
          <div class="card-source">来源: Sentinel的限流策略 - 7. 限流效果和处理策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在Sentinel中，实现限流逻辑有哪三种主要方式？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Sentinel提供了三种主要的限流实现方式：1. 基于注解的限流，通过在方法上添加 `@SentinelResource` 注解实现；2. 基于API的限流，通过在代码中显式调用 `SphU.entry()` 等API来定义资源和处理逻辑；3. 流控规则的配置，通过配置文件或Sentinel控制台来集中定义和管理限流规则。</div>
          </div>
          <div class="card-source">来源: Sentinel限流的实现方式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何通过编程方式（API方式）在Sentinel中定义限流资源并加载限流规则？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通过API方式，首先使用 `try-with-resources` 语句和 `SphU.entry("resourceName")` 来定义需要保护的资源，并在 `catch (BlockException ex)` 块中处理限流逻辑。然后，通过 `FlowRuleManager.loadRules(rules)` 方法加载一个包含限流规则（如QPS阈值）的 `FlowRule` 列表。</div>
          </div>
          <div class="card-source">来源: Sentinel限流的实现方式 - 2. 基于API的限流</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">算法</div>
          <div class="card-question">滑动窗口算法相较于固定窗口算法，其主要优势是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">算法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">滑动窗口算法的主要优势在于解决了固定窗口算法在窗口边界处可能出现的流量突增问题。通过将时间窗口细分为多个小窗口并进行滑动统计，它能够更平滑、更精确地控制请求速率。</div>
          </div>
          <div class="card-source">来源: sentinel限流算法 - 滑动窗口算法（Sliding Window Algorithm）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">算法</div>
          <div class="card-question">请简述令牌桶算法和漏桶算法的工作原理及其在处理突发流量上的差异。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">算法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">令牌桶算法：系统以恒定速率向桶中放入令牌，请求需要获取令牌才能通过。它能够处理突发流量，因为只要桶中有足够的令牌，瞬时的大量请求可以被快速处理。<br>漏桶算法：请求进入漏桶，系统以恒定速率从桶中取出并处理请求。它能平滑流量，但处理突发流量时不如令牌桶灵活，因为处理速率是固定的，超出的请求会被丢弃。</div>
          </div>
          <div class="card-source">来源: sentinel限流算法</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
